//package com.kjs.execptionless;
//
//import com.kjs.common.resultModel.JsonResult;
//import org.springframework.http.HttpHeaders;
//import org.springframework.http.HttpStatus;
//import org.springframework.http.ResponseEntity;
//import org.springframework.web.bind.annotation.ControllerAdvice;
//import org.springframework.web.bind.annotation.ExceptionHandler;
//import org.springframework.web.bind.annotation.ResponseBody;
//import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.util.Enumeration;
//import java.util.logging.Logger;
//
//
///**
// * 全局异常处理
// * 1）全局异常处理是个比较重要的功能，一般在项目里都会用到。
// * 2）我大概把一次请求分成四个种类型，来分别进行全局的异常处理。
// * 3）在进入Controller之前，譬如请求一个不存在的地址，404错误。
// * 4）在执行@RequestMapping时，进入逻辑处理阶段前。譬如传的参数类型错误。
// * 5）以上都正常时，在controller里执行逻辑代码时出的异常，譬如空指针。
// * 6）filter中产生的异常
// * [参考：http://blog.sina.com.cn/s/blog_16c036c880102xqhe.html]
// */
//@ControllerAdvice
//public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
//
//    public static final Logger logger = Logger.getLogger(GlobalExceptionHandler.class.getName());
//
//    /*
//     * 在controller里面内容执行之前，检验一些参数不匹配，Get \ Post 方法不对之类的
//     */
//    protected ResponseEntity<Object> handleExceptionInternal(Exception ex, Object body, HttpHeaders headers, HttpStatus httpStatus) {
//        System.out.println("错误");
//        return new ResponseEntity<Object>("出错啦", HttpStatus.NOT_EXTENDED);
//    }
//
//
//    @ExceptionHandler(value = Exception.class)
//    @ResponseBody
//    public JsonResult<String> jsonHandler(HttpServletRequest request, Exception ex) throws Exception {
//
//        log(ex, request);
//        return new JsonResult<>();
//    }
//
////    /**
////     * 主动throw的异常
////     */
////    @ExceptionHandler(BusinessException.class)
////    public JsonResult handleUnProccessableServiceException(BusinessException e, HttpServletResponse response) {
////        response.setStatus(e.getCode());
////        return new JsonResult(e.getCode(), e.getMsg());
////    }
//
//    //
//    private void log(Exception ex, HttpServletRequest request) {
//        logger.info("*******************************异常开始***********************************");
//
//        logger.info("请求地址：" + request.getRequestURI());
//        Enumeration enumeration = request.getParameterNames();
//        logger.info("请求参数：");
//        while (enumeration.hasMoreElements()) {
//            String name = enumeration.nextElement().toString();
//            logger.info(name + "----" + request.getParameter(name));
//        }
//        StackTraceElement[] elements = ex.getStackTrace();
//        for (StackTraceElement stackTraceElement : elements) {
//            logger.info(stackTraceElement.toString());
//        }
//        logger.info("*******************************异常结束***********************************");
//
//    }
//
//}
